<?php

class ParkplatzController extends Zend_Controller_Action
{
	
    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body 
        return $this->_redirect('/parkplatz/uebersicht');
    }

    public function anlegenAction()
    {
        // action body
        $request = $this->getRequest();
		$pareNamespace = new Zend_Session_Namespace('PaRe');
		
		//Überprüft ob der Benutzer Admin ist
		if($pareNamespace->status=='Admin'){
			
			$form = new Application_Form_ParkplatzAnlegenForm();
			
	        if ($this->getRequest()->isPost()){
	        	if ($form->isValid($request->getPost())){
	        		
	        		$model = new Application_Model_Parkplatz($form->getValues());
	        		$mapper = new Application_Model_ParkplatzMapper();
	        		
	        		if ($mapper->standortExists($model->getStandort())){
	        			echo 'Standort existiert bereits';
	        		} else {
	        			
	        			$mapper->anlegen($model);
	        			$mapperNeu = new Application_Model_ParkplatzMapper();
	        			
	        			//ist etwas umständlich übergeben, würde auch anders funktionieren
	        			$temp = $mapperNeu->fetchStandort($model->getStandort());
	        			$tempNr = (string) $temp[0]->parkplatzNr;
	        			$temp[0]->kalenderName = "Kalender".$tempNr;
	        			
	        			$pNr = $temp[0]->parkplatzNr;
	        			
	        			$mapperNeu->anlegenKalender($temp);
	        			
	        			//Kaldener wird ebenfalls erstellt
	        			$kalendermapper = new Application_Model_KalenderMapper();
	        			$kalendermapper->erstelleKalender($temp[0]->kalenderName);
	        			
	        			return $this->_redirect('/kalender/bearbeiten?parkplatznr='.$pNr);
	        			
	        		}
	        	}
	        }
		} else {
			
			//leitet sonst zur Fehler Action weiter
     		return $this->_redirect('/benutzer/meldung?meldung=falscherStatus');
     		
        }
        $this->view->form = $form;
    }

    public function uebersichtAction()
    {
        // action body
     	$request = $this->getRequest();
     	$pareNamespace = new Zend_Session_Namespace('PaRe');
     	
     	//überprüft, welchen Status der angebmeldete Benutzer hat
     	if (isset($pareNamespace->status)){
     		if ($pareNamespace->status == 'Admin'){
     			$statusTemp = 0;
     		} else if ($pareNamespace->status == 'stud' || $pareNamespace->status == 'Extern'){
     			$statusTemp = 1;
     		} else
     			$statusTemp = 2;
     	}
     	
     	//der Nummer für den Status wir an die View übergeben
     	$this->view->status = $statusTemp;
     	
     	//Überprüft ob ein Benutzer angemeldet ist
     	if (isset($pareNamespace->nr)){
     		
     		$mapper = new Application_Model_ParkplatzMapper();
     		$temp = $mapper->anzahlGesamt();
     		
     		$this->view->table = $mapper->fetchAll();
     		$this->view->anzahl = $temp;
     		
     	} else {
     		
     		//Leitet sonst zur Meldung Action weiter
     		return $this->_redirect('/benutzer/meldung?meldung=nichtAngemeldet');
     		
     	}
    }

    public function aendernAction()
    {
        // action body
        $pareNamespace = new Zend_Session_Namespace('PaRe');
        $sessiont = new Zend_Session_Namespace('PaRe');
        $mapper = new Application_Model_ParkplatzMapper();
		
        if (isset($_GET['aendern'])){
        	
        	$parkplatzNr = $_GET['aendern'];
        	$sessiont->pNr = $parkplatzNr;
        	
        	//ist gelöscht, wenn die Funktion ein zweites mal aufgerufen wird
        //	Zend_Registry::set('index', $parkplatzNr);
        
        } else if (empty($_GET['aendern'])){
        	
        	$parkplatzNr = $sessiont->pNr;
        	
        	//ist nicht verfügbar, nachdem die Funktion nochmal aufgerufen wird
        //	$parkplatzNr = Zend_Registry::get('index');
        
        }
        
    	if(($pareNamespace->status == 'Admin') && ($mapper->parkplatzExists($parkplatzNr) == true)){
    		
    		$request = $this->getRequest();
    		$temp = $mapper->fetchParkplatz($parkplatzNr);
    		
    		$form = new Application_Form_ParkplatzAnlegenForm(null,
    			$temp[0]->parkplatzNr,
    			$temp[0]->anzahl,
    			$temp[0]->standort,
    			$temp[0]->beschreibung);
    		
    			//schreibt die Anzahl der Parkplätze in die Session, damit diese nicht geändert werden kann
    		if (isset($_GET['aendern'])){
    			$sessiont->anz = $temp[0]->anzahl;
    		}
    		
    		if($this->getRequest()->isPost()){
    			
    			if($form->isValid($request->getPost())){
    				
    				$model = new Application_Model_Parkplatz($form->getValues());
    				$mapper2 = new Application_Model_ParkplatzMapper();
    				$temp2 = $mapper2->fetchParkplatz($parkplatzNr);
    				
	        		//überprüft, ob die Anzahl nicht geändert wurde
    				 if ($sessiont->anz == $model->getAnzahl()){
    				 	
    				 	//überprüft, ob der Standort ungleich Standort ist
    				    if ($temp2[0]->standort != $model->getStandort()){
    				    	
    				    	//wenn ja, dann Überprüfung mit den Standorten der DB
    						if ($mapper->standortExists($model->getStandort()) == true){
    							echo 'Standort existiert bereits';
    							
    						} else {
    							$mapper->aendern($model, $parkplatzNr);
    						}
    						
    					} else {
    						$mapper->aendern($model, $parkplatzNr);
    					}
    					
    					//Anzahl der Parkplätze darf nicht geändert werden
    				} else if ($sessiont->anz != $model->getAnzahl()){
    					echo 'Anzahl der Parkplätze darf nicht geändert werden';
    				}
    			}
    		}
    	} else {
    		
    		//leitet sonst zur Fehler Action weiter
     		return $this->_redirect('/benutzer/meldung?meldung=falscherStatus');
    	}
    	$this->view->form = $form;
    }

    public function loeschenAction()
    {
        // action body
        $pareNamespace = new Zend_Session_Namespace('PaRe');
        $mapper = new Application_Model_ParkplatzMapper();
        $kalenderMapper = new Application_Model_KalenderMapper();
    	
        if ($pareNamespace->status == 'Admin'){
        	 if (isset($_GET['loeschen']) && ($mapper->parkplatzExists($_GET['loeschen']))){
        	 	
        	 	$temp = $mapper->fetchParkplatz($_GET['loeschen']);
        	 	$mapper->loeschen($_GET['loeschen']);
        	 	
        	 	//Kalender wird ebenfalls entfernt
        	 	$kalenderMapper->entferneKalender($temp[0]->kalenderName);
        	 	
        	 	return $this->_redirect('/parkplatz/meldung?meldung=geloescht');
        	 }
        } else {
        	
        	//leitet sonst zur Fehler Action weiter
     		return $this->_redirect('/benutzer/meldung?meldung=falscherStatus');
        }
    }

    public function meldungAction()
    {
        // action body
    }
}